package com.bjsxy.user;

import java.lang.reflect.Method;

/**通过反射获取类的方法与使用*/
/*getMethods()  返回一个Method类型的数组，其中包含 所有的 公共的public 方法 (Object类的public方法也有)
 * getDeclaredMethods()  返回一个Method类型的数组，其中包含 所有的方法(本类的方法)
 * getMethod(String name,Class<?>...parameterTypes)  返回一个(public)公共的Method方法对象
 * getDeclaredMethod(String name,Class<?>...parameterTypes)   返回一个Method方法对象*/
public class GetMethod {
    public static void main(String[] args) throws  Exception{
        //获取class对象
        Class clazz = UsersMethod.class;
        //返回一个Method类型的数组，其中包含 所有的 公共的public 方法 (Object类的public方法也有)
        Method[] methods = clazz.getMethods();
        for(Method m:methods){
            System.out.println(m);
            System.out.println(m.getName());//方法名称
        }
        System.out.println("包含 所有的方法(本类的方法)");
        Method[] methods1 = clazz.getDeclaredMethods();
        for (Method m:methods1){
            System.out.println(m);
            System.out.println(m.getName());
        }
        System.out.println("返回一个(public)公共的Method方法对象");
        //有异常，要抛出
        // 如果不是public修饰的会报错
        Method method = clazz.getMethod("setAge", int.class);
        System.out.println(method);
        System.out.println(method.getName());
        System.out.println(" 返回一个Method方法对象");
        Method method1 = clazz.getDeclaredMethod("eat");
        System.out.println(method1);
        System.out.println(method1.getName());
    }
}
